home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 9
/
The PC-SIG Library on CD ROM - Ninth Edition.iso
/
1201_300
/
DISK1262
/
DISK1262.ZIP
/
CMPRSS.D
< prev
next >
Wrap
Text File
|
1988-07-11
|
2KB
|
79 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;----------------------------------------
; C M P R S S -- COMPRESS THE SOURCE STRING & CONVERT TO UPPERCASE
;
; Entry conditions:
; AX holds offset to source string
; Exit conditions:
; DI,SI,AX,CX,FLAGS modified
;
; Calling Example:
;
; DEFINE M00,'This is "A test of THE" AMERICAN...'
; ;
; CALL CMPRSS M00
;
; Calling results:
;
; M00 = 'THISIS"A test of THE"AMERICA...'
;
SUBPGM CMPRSS
BEGIN CMPRSS
EXTRN _STREND:NEAR
PUSH ES
PUSH DS
POP ES
MOV DI,AX
MOV SI,AX
CALL _STREND ; CX = LENGTH
MOV SI,DI ; RESTORE THE POINTER
;
CMP_05:
LODSB ; FETCH THE CHARACTER
OR AL,AL ; TERMINATOR?
JZ CMP_25 ; YES, EXIT HOME
CMP AL,'a' ; LESS THAN 'a'?
JL CMP_07 ; YES
CMP AL,'z' ; GT 'Z'?
JG CMP_08 ; YES
AND AL,0DFH ; CONVERT THE CASE
JMP SHORT CMP_08
;
CMP_07:
CMP AL,' ' ; BLANK?
JE CMP_05 ; YES - TOSS IT
CMP AL,'I'-64 ; TAB?
JE CMP_05 ; YES - TOSS IT
;
CMP_08:
STOSB
;
CMP_10:
CMP AL,'"' ; DOUBLE QUOTE MARK?
JE CMP_19 ; NO, CONTINUE THE SEARCH
CMP AL,27H ; SINGLE QUOTE MARK?
JNZ CMP_05 ; NO, CONTINUE THE SEARCH
;
CMP_19:
MOV AH,AL ; AH HOLDS THE MATCH
;
CMP_20:
LODSB ; FETCH LITERAL STRING CHR
STOSB
OR AL,AL
JZ CMP_25 ; END, SO EXIT
CMP AL,AH ; CLOSING QUOTE?
JNE CMP_20 ; NO, CONTINUE LOOPING
JMP SHORT CMP_05 ; YES, CONTINUE WITH THE COMPRESS
;
CMP_25:
MOV [DI],AL ; SET THE TERMINATOR
POP ES
RET
;
ENDPGM CMPRSS
;